package cn.hill4j.tool.spring.ext.mvc.context;

import java.util.Objects;
/**
  * ClassName: ReqParamKey
  * Description: 请求参数定义类
  * @author hillchen
  * Date: 2023/8/13
  * @version: 1.0
  */
public class ReqParamKey {
    /**
     * 请求参数类型
     */
    private ReqParamType paramType;
    /**
     * 请求参数名称
     */
    private String name;
    /**
     * body请求参数
     */
    private static ReqParamKey REQ_BODY_KEY = new ReqParamKey(ReqParamType.BODY,"");

    /**
     * @author hillchen
     * Description: 构造方法
     * Date: 2023/8/13 00:17
     * @param paramType 请求参数类型
     * @param name 请求参数名称
     **/
    private ReqParamKey(ReqParamType paramType, String name) {
        this.paramType = paramType;
        this.name = name;
    }

    /**
     * @author hillchen
     * Description: 构造body请求参数定义信息
     * Date: 2023/8/13 00:18
     * @return ReqParamKey
     **/
    public static ReqParamKey buildReqBodyKey(){
        return REQ_BODY_KEY;
    }
    /**
     * @author hillchen
     * Description: 构造reqquery请求参数定义信息
     * Date: 2023/8/13 00:19
     * @param name query请求参数名称
     * @return ReqParamKey
     **/
    public static ReqParamKey buildReqQueryKey(String name){
        return new ReqParamKey(ReqParamType.QUERY,name);
    }
    /**
     * @author hillchen
     * Description: 构造扩展请求参数定义信息
     * Date: 2023/8/13 00:19
     * @param name 扩展请求参数名称
     * @return ReqParamKey
     **/
    public static ReqParamKey buildReqExtKey(String name){
        return new ReqParamKey(ReqParamType.DES_EXT,name);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        ReqParamKey that = (ReqParamKey) o;
        return paramType == that.paramType && name.equals(that.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(paramType, name);
    }
}
